// 权限控制
import store from '@/store'
import router from '@/router'
import { asyncRoutes } from '@/router'

import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 白名单
const whiteList = [
  '/login',
  '/404'
]

// 路由前置守卫
router.beforeEach(async(to, from, next) => {
  nprogress.start()
  const token = store.state.user.token
  //   console.log(token)
  if (token) {
    if (to.path === '/login') {
      next('/')
    } else {
      // 只有用户登录之后才可以调用用户信息接口
      // 且前往任意路由地址都需要该信息
      if (!store.state.user.userInfo.userId) {
        const roles = await store.dispatch('user/fetchUserInfo')
        // console.log(roles)
        // 对所有动态路由表做过滤处理
        const filterRoutes = asyncRoutes.filter(item => {
          // 根据路由的 name 属性，能在 menus 权限数据中找到，代表可以访问
          return roles.menus.includes(item.children[0].name)
        })
        console.log('根据权限过滤后的路由表为: ', filterRoutes)
        // 使用 addRoutes 方法，将用户可以访问的动态路由表，添加到路由表中
        router.addRoutes(filterRoutes)
        // 将用户可以访问的动态路由表，传递给菜单数据
        store.commit('menu/setMenuList', filterRoutes)
        // console.log(...to)

        // 怎么进来的，就重新进来一次
        next({
          ...to,
          replace: true
        })
        return
      }
      next()
    }
    next()
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
    // next()
  }
})

router.afterEach((to, from) => {
  nprogress.done()
})
